
// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (vm) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = vm.httpPath ; /* 根域名 */
		// 配置请求头信息
		config.header= {
			'content-type': 'application/json;charset=UTF-8'
		};
        return config
    })
	
	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
			// uni.showLoading({
			// 			title:'加载中'
			// 		})
			// num++
	    // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
	    config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		const token = uni.getStorageSync('token') || "";
		
		if(config?.custom?.auth) {
			
			console.log('是否传token',config.custom.auth)
			
			// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
			 //config.data= Object.assign({}, config.data, token ? {token} : "")
			  // config.params['token'] = token;
			  // 配置请求头信息
			  config.header= {
			  	'content-type': 'application/json;charset=UTF-8',
				'Authorization': "Bearer " + token,
			  };
			  
			  
			  
			  console.log('查看配置',config)
			  
			// config.data.token = token?token:'';
		}
		
		
	    return config 
	}, config => { // 可使用async await 做异步操作
	    return Promise.reject(config)
	})
	
	// 响应拦截
	uni.$u.http.interceptors.response.use((res) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		// num--;
		// if (num <= 0) {
		//   uni.hideLoading()
		// } else {
		//  uni.showLoading({
		// 	title:'加载中'
		//  })  
		// }
		// 返回状态码：
		
		const data = res.data

		// 自定义参数
		const custom = res.config?.custom
		
		console.log('获取的数据',data);
		
		// // -1：未登录
		if (data.code == -1 || data.code == -10 || data.code == -4) {
			uni.showToast({
				title: '未登录,正在前往登录页！',
				icon: 'none',
				duration: 2000
			});
			setTimeout(() => {
				uni.reLaunch({
					url: '/pages/login/login'
				})
			}, 1200)
			return false;
		}
		
		
		if (data.code !== 1) {
			// return uni.$u.toast(data.msg);
			// uni.hideLoading()
			// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
			
			console.log('custom',data.code)
			
			//未登录 清楚token
			if(data.code==-1){
				uni.removeStorageSync('token');
			}
			
			if (custom.toast !== false) {
				uni.$u.toast(data.msg)
			}

			// // 如果需要catch返回，则进行reject
			if (custom?.catch) {
				return Promise.reject(data)
			} else {
				// 否则返回一个pending中的promise，请求不会进入catch中
				return new Promise(() => {})
			}
		}
		return data.data === null ? data : data.data
	}, (res) => { 
		// 对响应错误做点什么 （statusCode !== 200）
		// uni.hideLoading()
		return Promise.reject(response)
		// return uni.$u.toast(JSON.stringify(res));
	})
}